const express = require('express');
const router = express.Router();
const deepseekService = require('../services/deepseek');

// 预设的问答知识库（作为备用）
const knowledgeBase = {
  '如何下单': {
    answer: '下单步骤：\n1. 在商品页面选择您喜欢的奶茶\n2. 点击"加入购物车"\n3. 在购物车中确认商品和数量\n4. 点击"去结算"\n5. 确认订单信息后点击"提交订单"\n6. 完成支付即可',
    keywords: ['下单', '购买', '怎么买', '如何购买']
  },
  '如何支付': {
    answer: '支付方式：\n1. 提交订单后会自动跳转到支付页面\n2. 目前支持微信支付\n3. 支付成功后订单状态会变为"已支付"\n4. 商家确认后会开始制作您的奶茶',
    keywords: ['支付', '付款', '怎么付', '如何付款']
  },
  '订单状态': {
    answer: '订单状态说明：\n• 待支付：订单已创建，等待您完成支付\n• 已支付：支付成功，等待商家处理\n• 已完成：订单已完成，可以取餐了',
    keywords: ['订单状态', '状态', '订单进度', '订单情况']
  },
  '联系客服': {
    answer: '客服联系方式：\n• 电话：400-123-4567\n• 微信：milktea_service\n• 工作时间：9:00-21:00\n• 在线客服：点击右上角"联系客服"',
    keywords: ['客服', '联系', '电话', '微信', '人工']
  },
  '配送时间': {
    answer: '配送时间：\n• 自提：下单后15-20分钟\n• 外卖：下单后30-45分钟\n• 高峰期可能会延长10-15分钟',
    keywords: ['配送', '时间', '多久', '送达', '自提']
  },
  '退款': {
    answer: '退款政策：\n• 未支付订单：可直接取消\n• 已支付订单：联系客服处理\n• 已完成订单：不支持退款',
    keywords: ['退款', '取消', '退钱', '退货']
  },
  '会员': {
    answer: '会员优惠：\n• 新用户注册送10元优惠券\n• 消费满50元送5元优惠券\n• 生日当月享受8折优惠\n• 积分可兑换免费饮品',
    keywords: ['会员', '优惠', '积分', '券', '折扣']
  },
  '营业时间': {
    answer: '营业时间：\n• 周一至周日：10:00-22:00\n• 节假日：9:00-22:00\n• 春节等特殊节日可能有调整',
    keywords: ['营业', '时间', '几点', '开门', '关门']
  },
  '价格': {
    answer: '价格说明：\n• 奶茶价格：15-30元\n• 小料加价：2-5元\n• 大杯加价：3元\n• 会员享受9折优惠',
    keywords: ['价格', '多少钱', '费用', '收费', '价钱']
  },
  '推荐': {
    answer: '热门推荐：\n• 珍珠奶茶：经典口味，销量第一\n• 芝士奶盖：浓郁香滑，层次丰富\n• 水果茶：清爽解腻，健康选择\n• 抹茶拿铁：日式风味，清香怡人',
    keywords: ['推荐', '热门', '好喝', '特色', '招牌']
  },
  '健康': {
    answer: '健康信息：\n• 我们使用优质原料，无添加剂\n• 糖度可调节：无糖、微糖、半糖、全糖\n• 提供低卡路里选项\n• 支持定制化需求',
    keywords: ['健康', '卡路里', '糖分', '添加剂', '营养']
  },
  '过敏': {
    answer: '过敏提醒：\n• 奶茶可能含有乳制品\n• 珍珠含有淀粉\n• 如有过敏史，请提前告知\n• 可提供无乳糖选项',
    keywords: ['过敏', '乳糖', '乳制品', '珍珠', '成分']
  }
};

// 本地智能匹配函数（备用）
function findBestMatch(userQuestion) {
  const question = userQuestion.toLowerCase();
  let bestMatch = null;
  let bestScore = 0;

  for (const [key, data] of Object.entries(knowledgeBase)) {
    // 检查关键词匹配
    for (const keyword of data.keywords) {
      if (question.includes(keyword.toLowerCase())) {
        const score = keyword.length;
        if (score > bestScore) {
          bestScore = score;
          bestMatch = key;
        }
      }
    }
    
    // 检查标题匹配
    if (question.includes(key.toLowerCase())) {
      const score = key.length + 10;
      if (score > bestScore) {
        bestScore = score;
        bestMatch = key;
      }
    }
  }

  return bestMatch;
}

// 获取本地回复（备用）
function getLocalResponse(question) {
  const bestMatch = findBestMatch(question);
  
  if (bestMatch) {
    return {
      answer: knowledgeBase[bestMatch].answer,
      matched: bestMatch,
      source: 'local'
    };
  }

  const generalReplies = [
    '抱歉，我没有理解您的问题。您可以尝试询问：如何下单、如何支付、订单状态、配送时间等问题。',
    '这个问题我暂时无法回答。建议您联系客服获取更详细的帮助。',
    '感谢您的提问！如果您有其他关于奶茶点餐的问题，我很乐意为您解答。',
    '您可以尝试点击下方的快捷问题，或者直接询问具体的操作步骤。',
    '我主要帮助解答奶茶点餐相关的问题，比如下单、支付、配送等。请问您需要了解哪方面的信息？'
  ];

  return {
    answer: generalReplies[Math.floor(Math.random() * generalReplies.length)],
    matched: null,
    source: 'local'
  };
}

// AI问答接口（混合模式）
router.post('/chat', async (req, res) => {
  try {
    const { question, context = [] } = req.body;
    
    if (!question || question.trim() === '') {
      return res.json({
        code: 1,
        message: '请输入您的问题'
      });
    }

    console.log('收到AI问题:', question);
    console.log('对话上下文:', context.length, '条消息');

    // 首先尝试使用DeepSeek API
    const deepseekResponse = await deepseekService.chat(question, context);
    
    if (deepseekResponse.success) {
      console.log('DeepSeek API调用成功');
      return res.json({
        code: 0,
        data: {
          answer: deepseekResponse.answer,
          matched: null,
          source: 'deepseek',
          usage: deepseekResponse.usage
        }
      });
    }

    // 如果DeepSeek失败，使用本地知识库
    console.log('DeepSeek API调用失败，使用本地知识库:', deepseekResponse.error);
    const localResponse = getLocalResponse(question);
    
    res.json({
      code: 0,
      data: {
        ...localResponse,
        fallback: true,
        fallbackReason: deepseekResponse.error
      }
    });

  } catch (error) {
    console.error('AI聊天接口错误:', error);
    
    // 发生异常时，使用本地知识库
    const localResponse = getLocalResponse(req.body.question || '');
    
    res.json({
      code: 0,
      data: {
        ...localResponse,
        fallback: true,
        fallbackReason: '服务器异常'
      }
    });
  }
});

// 获取快捷问题列表
router.get('/quick-questions', (req, res) => {
  try {
    const quickQuestions = [
      '如何下单？',
      '如何支付？',
      '订单状态说明',
      '如何联系客服？',
      '配送时间多久？',
      '可以退款吗？',
      '会员有什么优惠？',
      '营业时间是几点？',
      '奶茶价格是多少？',
      '有什么推荐的吗？',
      '奶茶健康吗？',
      '有过敏原吗？'
    ];

    res.json({
      code: 0,
      data: quickQuestions
    });

  } catch (error) {
    console.error('获取快捷问题错误:', error);
    res.json({
      code: 1,
      message: '服务器错误，请稍后重试'
    });
  }
});

// 检查DeepSeek API状态
router.get('/status', async (req, res) => {
  try {
    const isApiValid = await deepseekService.checkApiKey();
    const stats = deepseekService.getUsageStats();
    
    res.json({
      code: 0,
      data: {
        deepseekAvailable: isApiValid,
        stats: stats,
        timestamp: new Date().toISOString()
      }
    });

  } catch (error) {
    console.error('检查API状态错误:', error);
    res.json({
      code: 1,
      message: '检查API状态失败'
    });
  }
});

module.exports = router; 